package midianet.digital.negocio;

import java.util.List;

import javax.annotation.Resource;

import midianet.digital.excessao.InfraExcessao;
import midianet.digital.modelo.entidade.Produto;
import midianet.digital.modelo.entidade.filtro.ProdutoFiltro;
import midianet.digital.modelo.persistencia.ProdutoDAO;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
@Transactional(readOnly = true, rollbackFor=Exception.class)
public class ProdutoAS {
	
	@Resource
	private ProdutoDAO produtoDAO;
	
	@Transactional(readOnly = false)
	public void salvar(final Produto produto) throws InfraExcessao{
		if(produto.getId() == null){
			produtoDAO.incluir(produto);
		}else{
			produtoDAO.alterar(produto);
		}
	}
	
	public Produto obterPorCodigo(final String codigo) throws InfraExcessao{
		
		final Produto retorno = produtoDAO.obterPorCodigo(codigo); 
		
		return retorno;
	}
	
	public Produto obterProdutoPorId(Long id) throws InfraExcessao{
		
		final Produto retorno = produtoDAO.obterPorId(id); 
		
		return retorno;
	}
	
	@Transactional(readOnly=false)
	public void excluir(final Produto produto) throws InfraExcessao{
		produtoDAO.excluir(produto);
	}
	
	public List<Produto> listarPorFiltro(final ProdutoFiltro filtro) throws InfraExcessao{
		List<Produto> retorno = null;
		
		final boolean filtrarCodigo = filtro.getCodigo() != null && !filtro.getCodigo().trim().isEmpty();
		final boolean filtrarNome = filtro.getNome() != null && !filtro.getNome().trim().isEmpty();
		
		if(filtrarCodigo && filtrarNome){
			retorno = produtoDAO.listarPorCodigoENome(filtro.getCodigo(), filtro.getNome());
		}else if(filtrarCodigo){
			retorno = produtoDAO.listarPorCodigo(filtro.getCodigo());
		}else if(filtrarNome){
			retorno = produtoDAO.listarPorNome(filtro.getNome());
		}
//		if(retorno != null){
//			for(Produto produto: retorno){
//				produto.get
//			}
//		}
		
		return retorno;
		
	}
	
}